home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / util / termintr / part01 / Terminator.c < prev    next >
C/C++ Source or Header  |  1990-10-11  |  2KB  |  102 lines

  1. /*
  2. The Terminator virus killer by Russell Wallace
  3. See documentation file for details
  4. Compiled with Aztec C v3.4a using precompiled INCLUDE files and 16-bit ints
  5. Other module bootcode.o must be assembled with the Aztec assembler as
  6. detailed in the file bootcode.a
  7. NB - Must be linked with data/BSS in chip memory using +CDB with Aztec
  8. linker, because trackdisk.device buffers have to be in chip memory
  9. */
  10.  
  11. struct MsgPort *diskport;
  12. struct IOStdReq *diskreq;
  13. struct FileHandle *window;
  14. int unit;   /* Disk drive 0..3 */
  15. char buffer[2];   /* Drive number */
  16. long code[256];   /* Buffer for boot block code */
  17. extern long bootcode[20];   /* 80 bytes of actual code in separate module */
  18.  
  19. main (argc,argv)
  20. int argc;
  21. char **argv;
  22. {
  23.     int i;
  24.     for (i=0;i<20;i++)
  25.     code[i]=bootcode[i];    /* Copy boot code into buffer */
  26.         /* This is so memory after actual code will contain zeros */
  27.     if (!(window=Open ("CON:0/50/640/120/The Terminator v1.0",MODE_NEWFILE)))
  28.     exit (30);
  29.     print ("The Terminator virus killer by Russell Wallace 6 Feb 1989\n\
  30. WARNING - DO NOT USE ON A DISK WITH A CUSTOM BOOT BLOCK!\n");
  31. RETYPE:
  32.     print ("\
  33. Enter a number from 0 to 3 to protect/sterilize that floppy drive\n\
  34. or type Q to quit: ");
  35.     Read (window,buffer,2L);
  36.     buffer[1]=0;
  37.     if (buffer[0]=='q' || buffer[0]=='Q')
  38.     {
  39.     Close (window);
  40.     return;
  41.     }
  42.     unit=buffer[0]-'0';
  43.     if (unit<0 || unit>3)
  44.     goto RETYPE;
  45.     print ("Installing boot code on drive ");
  46.     print (buffer);
  47.     print ("...\n");
  48.  
  49.     /* Initialize for use of trackdisk.device */
  50.  
  51.     if (!(diskport=CreatePort (0L,0L)))
  52.     {
  53.     Close (window);
  54.     exit (30);
  55.     }
  56.     if (!(diskreq=CreateStdIO (diskport)))
  57.     {
  58.     DeletePort (diskport);
  59.     Close (window);
  60.     exit (29);
  61.     }
  62.     if (OpenDevice (TD_NAME,(long)unit,diskreq,0L))
  63.     {
  64.     DeleteStdIO (diskreq);
  65.     DeletePort (diskport);
  66.     Close (window);
  67.     exit (28);
  68.     }
  69.  
  70.     /* Write stuff */
  71.  
  72.     diskreq->io_Length=1024;
  73.     diskreq->io_Data=code;
  74.     diskreq->io_Command=CMD_WRITE;
  75.     diskreq->io_Offset=0;
  76.     DoIO (diskreq);
  77.  
  78.     /* Force update of track buffer to disk */
  79.  
  80.     diskreq->io_Command=CMD_UPDATE;
  81.     DoIO (diskreq);
  82.  
  83.     /* Turn motor off */
  84.  
  85.     diskreq->io_Length=0;
  86.     diskreq->io_Command=TD_MOTOR;
  87.     DoIO (diskreq);
  88.  
  89.     /* Clean up and go back to menu */
  90.  
  91.     CloseDevice (diskreq);
  92.     DeleteStdIO (diskreq);
  93.     DeletePort (diskport);
  94.     goto RETYPE;
  95. }
  96.  
  97. print (s)
  98. char *s;
  99. {
  100.     Write (window,s,(long)strlen (s));
  101. }
  102.